perm filename M[AP,SYS]3 blob sn#012656 filedate 1972-11-17 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00006 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	Start of program: main loop.
C00003 00003	Start of program: main loop.
C00005 00004	Subroutines: TOTS.
C00008 00005	Subroutines: NXTDG.
C00009 00006	Subroutines: STOPIT.
C00010 ENDMK
C⊗;
;Start of program: main loop.

	TITLE	M

↓CHAR←2
↓AC1 ←3
↓BOT ←4
↓CNT ←5
↓QUO ←6
↓REM ←7
↓DX  ←10
↓BOT ←11
↓BP  ←12
↓CHR ←13
↓CMD ←14
↓P   ←17

↓CR←15	↓LF←12	↓ALT←175

PDLEN←30
↓NPNS←200

PDLIST:	BLOCK	PDLEN
NAME:	BLOCK	NPNS*2
COUNT←NAME+1
LTR:	BLOCK	=32

BLANKS:	ASCII	/     /
DIGITS:	BLOCK	4

USERSF:	SIXBIT	/USERS/
	BLOCK	3
IBUF:	BLOCK	3

UCMD:	IOWD	2,NAME+2
	0

WAKEBK:	SIXBIT	/[-AP-]/
	SIXBIT	/ APSYS/
	0

DEFINE CHKANS {
	INCHRW	CHAR
	CAIE	CHAR,"Y"
	CAIN	CHAR,"y"}
;Start of program: main loop.

FAILED:	OUTSTR	[ASCIZ /	FAILED!
/]

M:	CALLI
	OUTSTR	[ASCIZ/
*/]
	MOVE	P,[IOWD PDLEN,PDLIST]
	MOVE	BP,[POINT 7,CMD]
	SETZ	CMD,
	MOVEI	CNT,5
	JRST	GETCH
PUTCH:	SOJL	CNT,GETCH
	TLZ	CHR,40
	IDPB	CHR,BP
GETCH:	INCHWL	CHR
	CAIE	CHR,CR
	JRST	PUTCH
	INCHWL	CHR
	CAIE	CHR,LF
	JRST	BADCMD

	CAMN	CMD,[ASCII /START/]
	JRST	[MOVEI	AC1,WAKEBK
		 SETZM	WAKEBK+2	;set wakeup value to NOW
		 CALLI	AC1,400061	;WAKEME
		 JRST	FAILED
		 JRST	DONE]

	CAMN	CMD,[ASCII /STOP /]
	JRST	STOPIT

	CAMN	CMD,[ASCII /USERS/]
	JRST	TOTS

BADCMD:	OUTSTR	[ASCIZ /
?ILLEGAL COMMAND
/]
	JRST	M
DONE:	OUTSTR	[ASCIZ /	DONE

/]
	CALLI	12			;EXIT
;Subroutines: TOTS.

	BEGIN	TOTS
↑TOTS:	OUTSTR	[ASCIZ/

/]
	MOVEI	BOT,2
	SETZM	COUNT
	SETZM	NAME
	INIT	0,10
	SIXBIT	/DSK/
	IBUF
	HALT	.
	SETZM	USERSF+3
	LOOKUP	0,USERSF
	JRST	FAILED
GETNAM:	SOSG	IBUF+2
	IN	0,
	JRST	[ILDB AC1,IBUF+1	;GET PN
		 ILDB CNT,IBUF+1	;GET COUNT FIELD FOR THIS PN
		 SOS  IBUF+2
		 JUMPN AC1,FIND
		 JRST GETNAM]
	STATO	0,20000	
	HALT	.
	RELEAS	0,
EOF:	MOVNI	AC1,-2(BOT)
	HRLM	AC1,UCMD
	CAILE	BOT,2
	JRST	NNN
	OUTSTR	[ASCIZ /
NO USERS YET.
/]
	JRST	DONE

FIND:
	MOVE	DX,BOT
NEXT:	SUBI	DX,2
	CAME	AC1,NAME(DX)
	JUMPG	DX,NEXT
	JUMPN	CNT,.+2			;IS THE COUNT FIELD ZERO?
	MOVEI	CNT,1			;YES. IMPLICIT COUNT OF 1.
	ADDM	CNT,COUNT		;ADD TO TOTAL COUNT OF PNs
	JUMPLE	DX,INSERT
	ADDM	CNT,COUNT(DX)
	JRST	GETNAM
INSERT:	CAIL	BOT,2*NPNS
	JRST	[OUTSTR [ASCIZ / TOO MANY PNS.  /]
		 JRST	FAILED]
	MOVEM	AC1,NAME(BOT)
	MOVEM	CNT,COUNT(BOT)
	ADDI	BOT,2
	JRST	GETNAM

PRNTNX:	OUTSTR	NAME(BOT)
	MOVE	BP,[POINT 7,DIGITS]
	MOVE	QUO,COUNT(BOT)
	PUSHJ	P,NXTDG
	MOVEI	QUO,CR
	IDPB	QUO,BP
	MOVEI	QUO,LF
	IDPB	QUO,BP
	MOVEI	QUO,0
	IDPB	QUO,BP
	OUTSTR	BLANKS
NNN:	SUBI	BOT,2
	JUMPGE	BOT,PRNTNX
	INIT	0,17
	SIXBIT	/DSK/
	0
	HALT	.	
	SETZM	USERSF+1
	SETZM	USERSF+2
	SETZM	USERSF+3
	ENTER	0,USERSF
	JRST	[OUTSTR [ASCIZ /
No new file written.
/]
		 JRST FIN]
	OUT	0,UCMD
	JRST	FIN
	RELEAS	0,3
	OUTSTR	[ASCIZ /
OUT UUO failed for new file.
/]
	JRST	DONE
FIN:	RELEAS	0,
	JRST	DONE
	BEND
;Subroutines: NXTDG.

NXTDG:	IDIVI	QUO,=10
	PUSH	P,REM
	SKIPE	QUO
	PUSHJ	P,NXTDG
	POP	P,QUO
	ADDI	QUO,60
	IDPB	QUO,BP
	POPJ	P,
;Subroutines: STOPIT.

	BEGIN	STOPIT

↑STOPIT:
	MOVEI	AC1,WAKEBK
	SETOM	WAKEBK+2	;set wakeup value to NEVER
	CALLI	AC1,400061	;WAKEME
	JRST	FAILED

	OUTCHR	["."]

	MOVE	BP,[POINT 7,LTR]
	MOVEI	CNT,5*=32
	JRST	LOACHR

STOCHR:	SOJLE	CNT,.+2
	IDPB	CHR,BP	

LOACHR:	INCHWL	CHR
	CAIE	CHR,ALT
	JRST	STOCHR

	SETZ	CHR,
	IDPB	CHR,BP

TEST:	MAIL	5,[SIXBIT /[-AP-]/
		   LTR]
	JRST	FAILED
	JRST	DONE
	JRST	FAILED

	BEND	STOPIT

	END	M